今天要來跟大家介紹算是我最常使用的工具 - Google sheet!
Google sheet 可是 GAS 最重要的應用之一,因為 Google sheet 能被用來儲存資料,也可進而去操作、複製、產出其他的應用,像是用 google sheet 中的資料去產出不同的 doc, slide 等等。
因此學會如何用 GAS 去操作 google sheet 就變得相當重要!!
我們就用從學資料庫「讀寫刪改」的步驟一起來學 google sheet 的操作吧!
不論是讀取或寫入資料,把握一個原則: 先選取,再讀/寫
下面會有大量 getRange()
選取資料的應用,我們直接從實例中學習吧~
以下將依序介紹如何讀取單個儲存格、一個範圍的儲存格,或者整列、整欄資料。
getValue()
假設我們想讀取A1儲存格的內容:
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var cellValue = sheet.getRange('A1').getValue();
Logger.log('A1的值是: ' + cellValue);
getRange('A1')
: 選擇A1儲存格。getValue()
: 獲取儲存格中的值。getRange()
除了參數可以用 A1 標記/ R1C1 標記法 去取值以外也可以使用行列數來去取值:
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var cellValue = sheet.getRange(0,0).getValue();
Logger.log('A1的值是: ' + cellValue);
getValues()
如果你想讀取一個範圍內的多個儲存格,例如A1到B2:
function readRange() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var rangeValues = sheet.getRange('A1:B2').getValues();
Logger.log('A1到B2的值是: ' + rangeValues);
}
getRange('A1:B2')
: 選擇從 A1 到 B2 的範圍。getValues()
: return 一個"二維"陣列,包含該範圍內的所有儲存格值。
getRangeList()
function readRangeList() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var rangeValues = sheet.getRange('A1:B2').getValues();
var rangeList = sheet.getRangeList(['A1:D4', 'F1:H4']);
}
getRangeList()
: return 一個 range 型別的二維陣列,包含所有範圍的所有儲存格值。
假設你想讀取第1列的所有值:
function readRow() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var rowValues = sheet.getRange(1, 1, 1).getValues();
Logger.log('第1列的值是: ' + rowValues[0]);
}
假設你想讀取第1欄的所有值:
function readColumn() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var columnValues = sheet.getRange(1, 1, sheet.getLastRow(), 1).getValues();
Logger.log('第1欄的值是: ' + columnValues);
}
Note:getRange()
不同的參數數量也會返回不同範圍的值,如下定義:
getRange(row, column) | 傳回指定座標左上方的儲存格範圍。 |
getRange(row, column, numRows) | 傳回指定座標的左上角儲存格範圍,以及指定列數的範圍。 |
getRange(row, column, numRows, numColumns) | 傳回指定座標上左上角儲存格的範圍,此範圍包含指定的資料列與欄數。 |
不過基本上,白話一點就是從 (row, column) 這個座標往下框 numRows, 往右框 numColumns 矩形範圍的值
Note: 起始列數/行數 default 從 0 開始唷!
讀取資料後,通常我們會對其進行一些處理,例如遍歷、計算或篩選。
以下是一個範例,讀取第一欄的所有資料,並計算其中數值的總和:
function sumColumnValues() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var columnValues = sheet.getRange(1, 1, sheet.getLastRow(), 1).getValues();
var totalSum = 0;
columnValues.forEach(function(row) {
totalSum += row[0];
});
Logger.log('第1欄的總和是: ' + totalSum);
}
forEach
: 用來迭代每一列中的值,並進行累加計算。
Google sheet Get 相關的函式相當多,以下整理一些較常使用到的:
函式 | 型別 | 回傳 |
getDataRange() | Range | 與顯示資料的維度相對應的 Range |
getLastColumn() | Integer | 最後一欄包含內容的位置 |
getLastRow() | Integer | 最後一列包含內容的位置 |
getRangeList(a1Notations) | RangeList | RangeList 集合,代表由 A1 標記或 R1C1 標記的非空白清單指定同一工作表中的範圍 |
getSelection() | Selection | 試算表中目前的 Selection |
getSheetId() | Integer | 這個物件所代表的工作表 ID |
getSheetName() | String | 工作表名稱 |
想看更多可直接參考官方文件
https://developers.google.com/apps-script/reference/spreadsheet/sheet
後面有時間會再進一步介紹這些函式,接下來繼續對 Google sheet 工作表「寫入」!